Mybatis动态SQL中 您所在的位置:网站首页 mybatis 添加字段 Mybatis动态SQL中

Mybatis动态SQL中

#Mybatis动态SQL中| 来源: 网络整理| 查看: 265

        用和 进行组合,对条件进行判断,一旦条件不成立时, 标签会把对应的and关键字去掉(还有or关键字),if条件后的and不存在,因此就不会对整个sql语句产生影响。

注意and关键字要放在每个语句中的库表字段赋值的前面。因为,一旦判断不成功, 要把对应的and关键字去掉(还有or关键字)。

一、首先我们看一种正确的建议使用方式:注意中and位置 select * from tbl_employee id=#{id} and last_name like #{lastName} and email=#{email} and gender=#{gender}

注意,``失败后, `` 关键字只会去掉库表字段赋值前面的and,不会去掉语句后面的and关键字,即注意,`` 只会去掉`` 语句中的最开始的and关键字。所以下面的形式是不可取的

下面这种方式是可能会导致失败!

select * from tbl_employee id=#{id} and last_name like #{lastName} and email=#{email} and gender=#{gender} 二、根据不同的写法习惯,有人可能会把 and 放在最后面,下面我们分别拆解用法的正确和错误方式。 1、错误方式一:

在mybatis的动态sql语句中使用标签可以判断sql中的条件是否成立。

select * from tbl_employee where id=#{id} and last_name like #{lastName} and email=#{email} and gender=#{gender}

在上面的动态sql语句中存在一个问题,当第一条sql判断语句

id=#{id}

失败时,即id值为null,而lastName、email和gender判断成功后,最后sql语句就会变为: 

select * from tbl_employee where and last_name like #{lastName} and email=#{email} and gender=#{gender}

where后面多一个and,执行sql时会失败

1.1、改正方式一:

在where条件后面加了一条判断1=1,然后在id的判断后加上and关键字,这样当下面if条件中的任何一个判断失败后,都不会影响整个sql语句。

select * from tbl_employee where 1=1 and id=#{id} and last_name like #{lastName} and email=#{email} and gender=#{gender} 2、错误方式二:

有些人习惯在每个if判断中的数据库字段的后面加and关键字,例如

select * from tbl_employee where id=#{id} and last_name like #{lastName} and email=#{email} and gender=#{gender}

但是上述情况存在一个弊端,当最后一个if判断gender失败时,sql语句就变成了: 

select * from tbl_employee where id=#{id} and last_name like #{lastName} and email=#{email} and

where条件的最后多一个and,sql语句执行的时候也会失败。

2.2、改正方式二:

在最后一个if语句中库表字段后加and关键字,然后在最后加1=1判断,无论能否查到,都能保证语句执行不会报错。

select * from tbl_employee where id=#{id} and last_name like #{lastName} and email=#{email} and gender=#{gender} and 1=1 3、建议方式(开篇的正确使用方式):

用和 进行组合,当条件不成立时,if条件后的内容包括and也不会存在,因此不会对整个sql语句产生影响。注意and关键字要放在每个语句中的库表字段赋值的前面。因为,一旦判断不成功, 会把对应的and关键字去掉(还有or关键字)。

select * from tbl_employee id=#{id} and last_name like #{lastName} and email=#{email} and gender=#{gender}

上述很多特殊字符可以写成转义的形式,相比不同之处集中在条件判断处,例如

select * from tbl_employee id=#{id} and last_name like #{lastName} and email=#{email} and gender=#{gender}

注意,``失败后, `` 关键字只会去掉库表字段赋值前面的and,不会去掉后面的and关键字,即注意,`` 只会去掉`` 语句中的最开始的and关键字。所以下面的形式是不可取的

select * from tbl_employee id=#{id} and last_name like #{lastName} and email=#{email} and gender=#{gender}

`` 因为,失败后,`不会自动去掉后面的and关键字,这种形式与错误方式二种原理相同。

------------------------------------------------------------------------------------以下无正文----------------------------------------------------------

注:仅供自己学习,记录问题和参考,共勉!

参考文章:

16、动态SQL之、条件判断_u010502101的博客-CSDN博客



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有